package br.com.agileplus.linkedcompany.web.api.client.impl;

import java.io.IOException;

import org.springframework.stereotype.Component;

import br.com.agileplus.linkedcompany.web.api.client.UsuarioWebApiClient;
import br.com.agileplus.linkedcompany.web.api.dto.in.UsuarioDTO;
import br.com.agileplus.linkedcompany.web.api.dto.out.AutenticacaoUsuarioDTO;
import br.com.agileplus.linkedcompany.web.api.properties.WebApiProperties;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;

@Component
public class UsuarioWebApiClientImpl implements UsuarioWebApiClient {

	private String endpointApi;
	
	public UsuarioWebApiClientImpl() {
		try {
			this.endpointApi = new WebApiProperties().getProperty("linkedCompany.webApi.endpoint");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public UsuarioDTO getUsuario(String nome) {
		try {
			Client client = Client.create();
			WebResource webResource = client
					.resource(this.endpointApi + "/usuario/" + nome);

			ClientResponse response = webResource.accept("application/json")
					.get(ClientResponse.class);

			if (response.getStatus() != 200) {
				throw new RuntimeException("Failed : HTTP error code : "
						+ response.getStatus());
			}

			UsuarioDTO usuarioDto = response.getEntity(UsuarioDTO.class);
			return usuarioDto;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return null;
	}
	
	public UsuarioDTO autenticarUsuario(String usuario, String senha) {
		Client client = Client.create();
		WebResource webResource = client
				.resource(this.endpointApi + "/usuario/autenticar");
		
		ClientResponse response = webResource.accept("application/xml")
				.post(ClientResponse.class, new AutenticacaoUsuarioDTO(usuario, senha));
		
		if (response.getStatus() != 200) {
			throw new RuntimeException("Failed : HTTP error code : "
					+ response.getStatus());
		}

		UsuarioDTO usuarioDto = response.getEntity(UsuarioDTO.class);
		
		return usuarioDto;
	}

}
